import Mock from 'mockjs'

/**
 * Members 模拟数据
 */
class MembersMock {

    // 显示资源列表
    index(option) {
        let param = this.parseOption(option);
        console.log('[会员模拟数据] 显示资源列表 param=', param, '&option=', option);
        // 可以通过传参 _success 来控制返回消息的成功状态。
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            data: {
                total: '@integer(0,10)',
                current_page: 1,
                last_age: '@integer(1,5)',
                'data|1-10': [{
                    // 'id': '@id', // ID
                    'id': '@increment', // ID
                    'user_name': '@cname', // 用户名
                    'nick_name': '@cname', // 昵称
                    'contact_name': '@cname', // 姓名
                    'group_name': '@integer(0,5)', // 分组名称
                    'password': '@string(8,16)', // 密码
                    'avatar': '@string("lower", 5)', // 头像
                    'email': '@email', // 电子邮箱
                    'mobile': '@cname', // 手机号码
                    'gender': '@integer(0,2)', // 性别
                    'login_count': '@integer(0,100)', // 登录次数
                    'login_time': '@datetime("yyyy-MM-dd HH:mm:ss")', // 登录时间
                    'register_ip': '@ip', // 注册IP
                    'status': '@integer(100,1000)', // 状态
                }],
            },
        })
    }

    // 显示指定的资源
    read(option) {
        let param = this.parseOption(option);
        console.log('[会员模拟数据] 显示指定的资源 param=', param, '&option=', option);
        if (!param.id || param.id.trim().length == 0) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': '@id', // 随机编号
                'id2': '@increment', // 自增长编号
                'guid': '@guid', // 全球唯一编码
                'serialid|1-5': /\d{5,10}\-/,
                'user_name': '@string("lower", 5)', // 5位小写字符
                'password': '@string(8,16)', // 8-16位字符串
                'salt': '@string(6)', // 6位字符串
                'real_name': '@cname', // 中文姓名
                'email': '@email',
                'mobile': /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
                'blance': '@float(0,100,1,5)',
                'score': '@integer(100,1000)',
                'address': '',
                'region': '@region', // 区域（华北、华南）
                'province': '@province', // 省份
                'ciry': '@city(true)', // 城市
                'country': '@county(true)', // 区镇
                'street': '@ctitle(6,10)',
                'zip': '@zip', // 邮编
                'gender': '@integer(0,2)',
                'age': '@integer(18,100)',
                'login_ip': '@ip',
                'login_count': '@integer(0,100)',
                'favorite': '@range(1,10)',
                'remark': '@ctitle(0,50)', // 0-50位中文
                'homepage': '@url', // 网址
                'signature': '@cparagraph(0,100)', // 个性签名
                'avatar': '@image("200x100", "#894FC4", "#FFF", "png", "描述!")',
                'created_time': '@datetime("yyyy-MM-dd HH:mm:ss")',
                'date_ymd': '@date("yyyy-MM-dd")',
            }
        })
    }

    // 保存新建的资源
    save(option) {
        let param = this.parseOption(option);
        console.log('[会员模拟数据] 保存新建的资源 param=', param, '&option=', option);
        if (!param.user_name || param.user_name.trim().length == 0) {
            return this.stdMessage(false, '用户名是必填项');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': '@id', // 随机编号
            }
        })
    }

    // 保存更新的资源
    update(option) {
        let param = this.parseOption(option);
        console.log('[会员模拟数据] 保存更新的资源 param=', param, '&option=', option);
        if (!param.id || isNaN(param.id)) {
            return this.stdMessage(false, '参数无效');
        }
        if (!param.user_name || param.user_name.trim().length == 0) {
            return this.stdMessage(false, '用户名无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })

    }

    // 删除指定资源
    delete(option) {
        let param = this.parseOption(option);
        console.log('[会员模拟数据] 删除指定资源 param=', param, '&option=', option);
        if (!param.id || param.id.trim().length == 0) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })
    }

    // 解析参数 option= {url:'/api/read?id=1', type:'GET', data:null}
    parseOption(option) {
        let param = {}
        if (option.url.indexOf('?') > -1) {
            new URLSearchParams(option.url.substring(option.url.indexOf('?') + 1)).forEach((v, k) => {
                param[k] = v;
            })
        }
        if (option.body) {
            if (option.body instanceof FormData) {
                option.body.forEach((v, k) => {
                    param[k] = v;
                })
            } else {
                param = JSON.parse(option.body);
            }
        }
        // 可以通过传参 _success 来控制返回消息的成功状态。默认返回成功消息。
        if (typeof (param._success) != 'boolean') {
            param._success = true;
        }
        return param;
    }

    // 返回标准消息对象
    stdMessage(success, message, data = '', code = 0) {
        return {
            success: success,
            message: message,
            data: data,
            code: code,
        }
    }
}

export default new MembersMock;